home *** CD-ROM | disk | FTP | other *** search
/ Freelog 112 / FreelogNo112-NovembreDecembre2012.iso / Jeu / deadlyrace / deadlyrace_setup.exe / {app} / Data / Scripts / level2.lua < prev    next >
Encoding:
Text File  |  2010-05-23  |  7.2 KB  |  305 lines

  1. local script = globalObject;
  2. local god = nil;
  3. local commandMap = {};
  4.  
  5. local BONUS_COUNT        = 16;
  6. local BONUS_UPDATE_TIME    = 15;
  7. local BONUS_SPAWN_D    = 8.0;
  8.  
  9. --~ bonus ratio in percents
  10. local BONUS_AMMO_RATION        = 40.0;
  11. local BONUS_ROCKET_RATION        = 15.0;
  12. local BONUS_MINE_RATION        = 10.0;
  13. local BONUS_NITRO_RATION        = 20.0;
  14. local BONUS_LIFE_RATION        = 15.0;
  15.  
  16.  
  17. local BONUS_SHIELD_RATION        = 10.0;
  18.  
  19.  
  20.  
  21. local Bonuses = 
  22. {
  23.     pBonuses        = nil;
  24.     nCount        = BONUS_COUNT;
  25.     
  26.     pLoadBonuses    = nil;
  27.     
  28.     fDt            = 0.0;
  29.     
  30.     bGenerated        = false;
  31.     
  32.     Initialize        = nil;
  33.     Update        = nil;
  34.     Generate        = nil;
  35.     UpdateList        = nil;
  36.     Release        = nil;
  37.     nLinesCount = 0;
  38.     nLineStep = 0;
  39. };
  40.  
  41. Bonuses.Initialize = function ()
  42.     local pBonusAmmo        = LoadRenderObject("bonus_ammo.rdf", 20);
  43.     local pBonusRocket        = LoadRenderObject("bonus_rocket.rdf", 20);
  44.     local pBonusMine        = LoadRenderObject("bonus_mine.rdf", 20);
  45.     local pBonusLife        = LoadRenderObject("bonus_life.rdf", 20);
  46.     local pBonusNitro        = LoadRenderObject("bonus_nitro.rdf", 20);
  47.     local pBonusShield        = LoadRenderObject("bonus_shield.rdf", 20);
  48.     
  49.     local nPercent = BONUS_COUNT / 100.0;
  50.     
  51.     Bonuses.nLinesCount = GetSplineLineCount();
  52.     Bonuses.nLineStep    = ToInt(Bonuses.nLinesCount / BONUS_COUNT);
  53.  
  54.     Bonuses.pLoadBonuses = {};
  55.     
  56.     Bonuses.pLoadBonuses[1] = {};
  57.     Bonuses.pLoadBonuses[1][1] = pBonusAmmo;
  58.     Bonuses.pLoadBonuses[1][2] = 0.0;
  59.     Bonuses.pLoadBonuses[1][3] = BONUS_AMMO_RATION;
  60.     
  61.     Bonuses.pLoadBonuses[2] = {};
  62.     Bonuses.pLoadBonuses[2][1] = pBonusRocket;
  63.     Bonuses.pLoadBonuses[2][2] = 0.0;
  64.     Bonuses.pLoadBonuses[2][3] = BONUS_ROCKET_RATION;
  65.     
  66.     Bonuses.pLoadBonuses[3] = {};
  67.     Bonuses.pLoadBonuses[3][1] = pBonusNitro;
  68.     Bonuses.pLoadBonuses[3][2] = 0.0;
  69.     Bonuses.pLoadBonuses[3][3] = BONUS_NITRO_RATION;
  70.     
  71.     Bonuses.pLoadBonuses[4] = {};
  72.     Bonuses.pLoadBonuses[4][1] = pBonusMine;
  73.     Bonuses.pLoadBonuses[4][2] = 0.0;
  74.     Bonuses.pLoadBonuses[4][3] = BONUS_MINE_RATION;
  75.     
  76.     
  77.     Bonuses.pLoadBonuses[5] = {};
  78.     Bonuses.pLoadBonuses[5][1] = pBonusLife;
  79.     Bonuses.pLoadBonuses[5][2] = 0.0;
  80.     Bonuses.pLoadBonuses[5][3] = BONUS_LIFE_RATION;
  81.     
  82.     
  83. --~     Bonuses.pLoadBonuses[6] = {};
  84. --~     Bonuses.pLoadBonuses[6][1] = pBonusShield;
  85. --~     Bonuses.pLoadBonuses[6][2] = 0.0;
  86. --~     Bonuses.pLoadBonuses[6][3] = BONUS_SHIELD_RATION;
  87. end
  88.  
  89. Bonuses.Update = function ()
  90.     if(Bonuses.bGenerated)
  91.     then
  92.         for i = 1, Bonuses.nCount do
  93.             if(CheckVisible(Bonuses.pBonuses[i][1]))
  94.             then
  95.                 DrawDynamicObject(Bonuses.pBonuses[i][1]);
  96.             end
  97.         end
  98.     end
  99. --~     
  100. --~     Bonuses.fDt = Bonuses.fDt + GetDeltaTime();
  101. --~     if(Bonuses.fDt >= BONUS_UPDATE_TIME)
  102. --~     then
  103. --~         ClearBonuses();
  104. --~         Bonuses.bGenerated = false;
  105. --~         Bonuses.Generate();
  106. --~         Bonuses.fDt = 0.0;
  107. --~     end
  108. end
  109.  
  110. Bonuses.Generate = function ()
  111.     if(not Bonuses.bGenerated)
  112.     then
  113.         --math.randomseed(GetDeltaTime() * 1000.0);
  114.         math.randomseed(os.clock());
  115.         
  116.         local iLine         = 0;
  117.         for i = 1, BONUS_COUNT do
  118.             local pBonus    = {};
  119.             pBonus[1] = nil;
  120.             pBonus[2] = nil;
  121.             pBonus[3] = nil;
  122.             pBonus[4] = nil;
  123.             pBonus[5] = nil;
  124.             pBonus[6] = nil;
  125.             local rnd = math.random(100);
  126.             local sum = 0;
  127.             local bcount = 5;
  128.             if (IsDeathRace())
  129.             then
  130.                 bcount = 3;
  131.             end
  132.             local bonus_number = -1;
  133.             for j = 1,bcount
  134.             do
  135.                 if (rnd >= sum and rnd < sum + Bonuses.pLoadBonuses[j][3])
  136.                 then
  137.                     if ((j == 2 and not IsWeaponMounted(GetCurrentCar(), 2)) or (j == 4 and not IsWeaponMounted(GetCurrentCar(), 3)))
  138.                     then
  139.                         bonus_number = 1;
  140.                         break;
  141.                     end
  142.                     for kk = 1,6
  143.                     do
  144.                         pBonus[kk] = Clone(Bonuses.pLoadBonuses[j][1]);
  145.                     end
  146.                     break;
  147.                 end
  148.                 sum = sum + Bonuses.pLoadBonuses[j][3];
  149.             end
  150.             if (bonus_number == -1)
  151.             then
  152.     --            while(not bFind)
  153.     --            do
  154.     --                local rnd = math.random(6);
  155.                     
  156.     --                if(Bonuses.pLoadBonuses[rnd][2] < Bonuses.pLoadBonuses[rnd][3])
  157.     --                then
  158.     --                    pBonus = Clone(Bonuses.pLoadBonuses[rnd][1]);
  159.     --                    Bonuses.pLoadBonuses[rnd][2] = Bonuses.pLoadBonuses[rnd][2] + 1;
  160.     --                    bFind = true;
  161.     --                end
  162.     --            end
  163.                 --local pBonus    = Clone(Bonuses.pLoadBonuses[math.random(6)]);
  164.                 iLine = math.random(Bonuses.nLinesCount);
  165.                 local x, y, z, dx, dy        = GetSplineLinePoint(iLine);
  166.                 
  167.                 for kk = 1,6
  168.                 do
  169.                     SetPosition(
  170.                         pBonus[kk],
  171.                         x  + dx * (- 4 * 3 + kk * 3), -- - BONUS_SPAWN_D / 3.0 + math.random() * BONUS_SPAWN_D,
  172.                         y  + dy * (- 4 * 3 + kk * 3), -- - BONUS_SPAWN_D / 3.0 + math.random() * BONUS_SPAWN_D,
  173.                         1
  174.                         );
  175.                     AddBonus(pBonus[kk], iLine);
  176.                 end
  177.             end
  178.             
  179. --            iLine = iLine + Bonuses.nLineStep;
  180.         end
  181.         
  182.         Bonuses.bGenerated = true;
  183.         Bonuses.UpdateList();
  184.     
  185.     end
  186. end
  187.  
  188. Bonuses.UpdateList = function ()
  189.     local name = GetCurrentParams(script);
  190. --~     
  191. --~     if("axel" == name)
  192. --~     then
  193. --~         Bonuses.pLoadBonuses[1][2] = Bonuses.pLoadBonuses[1][2] - 1;
  194. --~     elseif("brake" == name)
  195. --~     then
  196. --~         Bonuses.pLoadBonuses[2][2] = Bonuses.pLoadBonuses[2][2] - 1;
  197. --~     elseif("minus" == name)
  198. --~     then
  199. --~         Bonuses.pLoadBonuses[3][2] = Bonuses.pLoadBonuses[3][2] - 1;
  200. --~     elseif("plus" == name)
  201. --~     then
  202. --~         Bonuses.pLoadBonuses[4][2] = Bonuses.pLoadBonuses[4][2] - 1;
  203. --~     elseif("gloom" == name)
  204. --~     then
  205. --~         Bonuses.pLoadBonuses[5][2] = Bonuses.pLoadBonuses[5][2] - 1;
  206. --~     elseif("repair" == name)
  207. --~     then
  208. --~         Bonuses.pLoadBonuses[6][2] = Bonuses.pLoadBonuses[6][2] - 1;
  209. --~     end
  210.     
  211.     Bonuses.pBonuses    = GetBonusList();
  212.     Bonuses.nCount        = GetBonusesCount();
  213. end
  214.  
  215. Bonuses.Release = function ()
  216.     ClearBonuses();
  217.     Release(pBonusAmmo);
  218.     Release(pBonusRockets);
  219.     Release(pBonusMines);
  220.     Release(pBonusNitro);
  221.     Release(pBonusShield);
  222.     Release(pBonusLife);
  223. --~     Release(pBonusBrake);
  224. --~     Release(pBonusMinus);
  225. --~     Release(pBonusPlus);
  226. --~     Release(pBonusGloom);
  227. --~     Release(pBonusRepair);
  228.     Bonuses.bGenerated = false;
  229. end
  230.  
  231. local function BonusGenerate()
  232.     ClearBonuses();
  233.     Bonuses.bGenerated = false;
  234.     Bonuses.Generate();
  235. end
  236.  
  237. local function ExecuteCommands()
  238.     while(SetNextCommand(script))
  239.     do
  240.         local command = GetCurrentCommand(script);
  241.         if (commandMap[command])
  242.         then
  243.             commandMap[command]();
  244.         end
  245.     end
  246. end
  247.  
  248. local function AddObject()
  249.     god = StringToPointer(GetCurrentParams(script));
  250.     
  251.     SetLightCoeff(1);    
  252.     
  253.     Bonuses.Initialize();
  254.     Bonuses.Generate();
  255.     
  256.     ClearLevelTimers();
  257.     
  258.     SetMedalPoints(3, 150);
  259.     SetMedalPoints(2, 100);
  260.     SetMedalPoints(1, 50);
  261.     
  262.     SetLensFlare(82.801, -315.034, 99.029);
  263.     
  264.     if (IsDeathRace())
  265.     then
  266.         BONUS_AMMO_RATION        = 55.0;
  267.         BONUS_ROCKET_RATION        = 20.0;
  268.         BONUS_NITRO_RATION        = 25.0;
  269.     else
  270.         BONUS_AMMO_RATION        = 40.0;
  271.         BONUS_ROCKET_RATION        = 15.0;
  272.         BONUS_MINE_RATION        = 10.0;
  273.         BONUS_NITRO_RATION        = 20.0;
  274.         BONUS_LIFE_RATION        = 15.0;
  275.     end
  276.     
  277. end
  278.  
  279. local function DeleteObject()
  280.     Bonuses.Release();
  281.  
  282.     Release(god);
  283.     god = nil;
  284. --    Update();
  285.     StopScript(script);
  286. end
  287.  
  288. commandMap["release_all"]            = DeleteObject;
  289. commandMap["add_object"]            = AddObject;
  290. commandMap["delete_object"]        = DeleteObject;
  291. commandMap["update_bonus_list"]    = Bonuses.UpdateList;
  292. commandMap["bonus_generate"]    = BonusGenerate;
  293.  
  294. while(true)
  295. do
  296.     ExecuteCommands();
  297.     
  298.     if (god ~= nil and IsLevelStarted())
  299.     then
  300.         Bonuses.Update();
  301.     end
  302.     
  303.     Update();
  304. end
  305.